<?php
/**
 * Auther: Joshua Conero
 * Date: 2017/9/16 0016 18:06
 * Email: brximl@163.com
 * Name: pigeons 接口中间层
 */
namespace App\Http\Controllers\Api;

use hyang\Net;

class Pigeons extends ApiBaseCtrl
{
    /**
     * post 请求方式
     */
    public function RunPostRequest(){
        $request = request();
        $key = $request->get('key');
        $args = $request->get('args');
        if($args){
            $this->args = $args;
        }
        if($key){
            $only_login = $request->get('only_login');
            $pigeons = $this->getPigeons();
            // 关闭调试
            //$pigeons->debug = false;
            //Log::debug($key);
            // 登录用户获取
            $user = $this->getUserInfo('user');
            // 请求键值自动渲染
            $this->keyRender($key, function ($skey) use($user){
                $value = false;
                if('user' == $skey){
                    $value = $user;
                }
                return $value;
            });
            //debug($key);
            if(empty($user) && $only_login){
                $this->error('您好没有登录系统，获取当前用户信息获取失败！');
            }
            if($user){
                $pigeons->setUser($user);
            }
            $res = $pigeons->post($key, $args?$args:null);
            if($res && is_array($res) && isset($res['code'])){
                if(400 == $res['code']){
                    $this->error($res['msg']);
                }
            }
            //debug([$res]);
            //debug([$res, $pigeons->getError()]);
            if($res){
                $this->success($res);
            }
            else{
                if(env('APP_DEBUG') && $pigeons->errorMsg){
                    debug($pigeons->errorMsg);
                    debug("\r\n".$pigeons->errorTrace);
                }
                $this->error('数据请求失败');
            }
        }
        else{
            $this->error('请求参数不足');
        }
    }

    /**
     * get 请求方式, 请求参数格式： {key: string/钥匙, args: 请求参数, only_login: 1/0}
     */
    public function RunGetRequest(){
        //$this->sendJson();
        $request = request();
        $key = $request->get('key');
        $args = $request->get('args');
        if($args){
            $this->args = $args;
        }
        if($key){
            $only_login = $request->get('only_login');
            $pigeons = $this->getPigeons();
            // 关闭调试
            //$pigeons->debug = false;
            //Log::debug($key);
            // 登录用户获取
            $user = $this->getUserInfo('user');
            // 请求键值自动渲染
            $this->keyRender($key, function ($skey) use($user){
                $value = false;
                if('user' == $skey){
                    $value = $user;
                }
                return $value;
            });
            //debug($key);
            if(empty($user) && $only_login){
                $this->error('您好没有登录系统，获取当前用户信息获取失败！');
            }
            if($user){
                $pigeons->setUser($user);
            }
            $res = $pigeons->get($key, $args?$args:null);
            //debug([$res]);
            //debug([$res, $pigeons->getError()]);
            if($res){
                $this->success($res);
            }
            else{
                if(env('APP_DEBUG') && $pigeons->errorMsg){
                    debug($pigeons->errorMsg);
                    debug("\r\n".$pigeons->errorTrace);
                }
                $this->error('数据请求失败');
            }
        }
        else{
            $this->error('请求参数不足');
        }
    }

    /**
     * 当前用户的token值获取
     */
    public function GetUserToken(){
        $pigeons = $this->getPigeons();
        // 登录用户获取
        $user = $this->getUserInfo('user');
        if($user){
            $pigeons->setUser($user);
            $token = $pigeons->getToken();
            if($token){
                $this->success('token获取成功', ['token'=>$token]);
            }else{
                $this->error('token获取失败');
            }
        }
        $this->error('您还没有登录系统，token获取失败');
    }

    /**
     * 获取当前系统pid
     */
    public function GetSysPid(){
        $pigeons = $this->getPigeons();
        // 登录用户获取
        $user = $this->getUserInfo('user');
        $rToken = request()->get('token');
        if($user && $rToken){
            $pigeons->setUser($user);
            $token = $pigeons->getToken();
            if($token == $rToken){
                $pigeonsConf = config('pigeons.'.env('APP_ENV'));
                $pid = isset($pigeonsConf['conero_pid'])? $pigeonsConf['conero_pid']: '';
                $this->success('pid获取成功', ['pid'=>$pid]);
            }else{
                $this->error('pid获取失败');
            }
        }
        $this->error('您还没有登录系统获取请求插死你胡不足，pid获取失败');
    }
    private function keyRender(&$key, $callback=null){
        // 检测是否有 {}
        if(false !== strpos($key, '{') && false !== strpos($key, '}')){
            preg_match_all('/\{[^\{]+\}/', $key, $data);
            //debug($data);
            if(isset($data[0])) $data = $data[0];
            else{
                $data = [];
            }
            foreach ($data as $v){
                $skey = preg_replace('/\{|\}/', '', $v);
                $value = false;
                if($callback instanceof \Closure){
                    $value = call_user_func($callback, $skey);
                }
                if($value || null !== $value){
                    $key = str_replace($v, $value? $value: '', $key);
                }
            }
        }
    }
    // conero.cn 分发
    public function SurongGoto(){
        $token = $this->getUserInfo('token');
        $env = config('env.'.env('APP_ENV'));
        if($token){
            Net::go($env['aurora_url'].'?token='.$token);
        }else{
            Net::go($env['baseurl']);
        }
    }
}